#在进行访问私有化属性时，通常使用get/set方法进行访问的，可以使用property属性函数进行设置
# 让用户以调用属性的方式进行访问私有属性
class Person:
    def __init__(self):
        self.__age=19    #私有化实例属性
        pass
    def set_age(self,age):
        self.__age=age
        pass
    def get_age(self):
        return self.__age
    # 实现方式一：
    #定义一个属性，当对这个age设置值时调用set_age,
    # 当获取值时调用get_age
    # 注意：必须是以get,set开头的方法名，才能被调用
    age=property(get_age,set_age)
xm=Person()
xm.set_age(20)
print(xm.get_age())
xm.age=30
print(xm.age)

# 实现方式二：装饰器
class Animal:
    def __init__(self):
        self.__age=19    #私有化实例属性
        pass
    @property     # 使用装饰器对age进行装饰，提供一个getter方法
    def age(self):
        return self.__age
    @age.setter  #使用装饰器进行装饰，提供一个setter方法
    def age(self, age):
        self.__age = age
        pass
    pass
dog=Animal()
dog.age=4
print(dog.age)

# 使用装饰器@property实现的时候，方法名与私有化属性名保持一致
# getter方法与setter方法名保持一致
# 在 getter方法上面加上装饰器@property，在setter方法名上面加上getter方法名.setter
# getter方法要在setter方法前面被声明
